'''
解密拦栅密文
    删除密文中的空格得到新的密文
    将消息拆分成两行
    使用zip_longest填充消息得到明文

    zip_longest()函数：以元素最多对象来警醒fillvalue填充，如：
        res = zip_longest('abc', '12')
        for x in res:
            print(x)
        得到结果为：
            ('a','1')
            ('b','2')
            ('c',None)
'''

import math
import itertools

ciphertext = '''LTSRS OETEI EADET NETEH DOTER EEUCO SVRHR VRNRS UDRHS AEFHT ES'''

'''
步骤1
'''
def prep_ciphertext(ciphertext):
    message = ''.join(ciphertext.split())
    print('\n得到新的消息:{}'.format(message))
    return message

'''
步骤2
'''
def split_rails(message):
    row_len = math.ceil(len(message)/2) #向上取整
    row1 = (message[:row_len])
    row2 = (message[row_len:])
    return row1,row2

'''
步骤3
'''
def decrypt(row1,row2):
    plaintext = []
    for r1,r2 in itertools.zip_longest(row1,row2):
        plaintext.append(r1.lower())
        plaintext.append(r2.lower())
    if None in plaintext:
        plaintext.pop()
    print('\n第一行:{}'.format(row1))
    print('\n第二行:{}'.format(row2))
    print('\n得到明文消息:{}'.format(''.join(plaintext)))

def main():
    message = prep_ciphertext(ciphertext)
    row1,row2 = split_rails(message)
    decrypt(row1,row2)

if __name__ == '__main__':
    main()